import os

from ai_core.asr.fun_asr import FunAsr
from ai_core.audio_format.opus import OpusEncode
from ai_core.llm.chatglm import ChatGLM_LLM
from ai_core.tts.edge import Edge_TTS
import asyncio

from ai_core.utils.util import Util

if __name__ == "__main__":
    config = Util.get_config()
    # llm = ChatGLM_LLM(config.get("LLM").get("ChatGLM"))
    # response = llm.generate_response("你好")
    # print(response)
    # tts = Edge_TTS(config.get("TTS").get("EdgeTTS"))
    # output_file = asyncio.run(tts.text_to_speech(response, "test.mp3"))
    # # # windows 下播放
    # # os.system(f"start {output_file}")
    # # # # linux 下播放
    # # # os.system(f"mpg321 {output_file}")
    #
    # fun_asr = FunAsr(config.get("ASR").get("Fun_ASR"))
    # res_text = fun_asr.audio_file_to_text("test.mp3")
    # print(res_text)
    #
    # opusEncode = OpusEncode()
    # opus_data = opusEncode.load_opus_custom_data("test.opus")
    #
    # response = fun_asr.opus_data_to_text(opus_data)
    # print(f"response: {response}")

    # 测试 fun_asr 的功能
    # 1、测试 load_opus_custom_data, 必须使用 save_opus_custom_data 生成的 opus 文件
    # fun_asr = FunAsr(config.get("ASR").get("Fun_ASR"))
    # opusEncode = OpusEncode()
    # opus_data = opusEncode.load_opus_custom_data("test.opus")
    #
    # response = fun_asr.opus_data_to_text(opus_data)
    # print(f"response: {response}")

    # 2、测试 load_opus_raw_data, 必须使用 save_opus_raw_data 生成的 opus 文件
    # fun_asr = FunAsr(config.get("ASR").get("Fun_ASR"))
    # opusEncode = OpusEncode()
    # opus_data = opusEncode.load_opus_raw_data("test.pkl")
    # response = fun_asr.opus_data_to_text(opus_data)
    # print(f"response: {response}")

    # 测试 tts 语音合成的功能
    # tts = Edge_TTS(config.get("TTS").get("EdgeTTS"))
    # opus_datas,duration = asyncio.run(tts.text_to_opus_data("你在干嘛？"))
    # print(f"opus_datas：{opus_datas}")
    # print(f"音频时长：{duration}")

    # 测试 asr 语音识别的功能：从终端esp32s32上获取音频数据，然后进行语音识别
    fun_asr = FunAsr(config.get("ASR").get("Fun_ASR"))
    opusEncode = OpusEncode()
    opus_data = opusEncode.load_opus_custom_data("test.opus")
    print(f"opus_data: {opus_data}")
    response = fun_asr.opus_data_to_text(opus_data)
    print(f"response: {response}")